#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time    : 2023/7/3 22:05
# @Author  : BadMan
# @FileName: 01 函数的参数.py
"""
    函数的参数
    不可变参数 nums
    可变参数 *nums
    关键字参数
"""

"""
    可变参数
"""
# 1. 传入不可变参数
def calc(numbers):
    sum = 0
    for n in numbers:
        sum = sum + n * n
    print(sum)
# 构造一个列表list或者元组tuple
calc([1,2,3])
calc((1,2,3,4,5))
"""
在参数前加上*，默认参数接受到的是一个元组
"""
# 2. 传入可变参数
def calc1(*number):
    sum = 0
    for i in number:
        sum = sum + i * i
    print(sum)
calc1(1,2,3)

# 3.已经有了list或者元组如何进行传参
nums = [1,2,3]
nums1 = (1,2,3,4)
# *nums 表示将nums作为可变参数传递过去
    # 可变参数我们需要在方法中的参数前面加上*
calc1(*nums)
calc1(*nums1)

"""
    关键字参数
    **kw 可以传入多个参数，形式: k-v 形式 ，kw默认会把传入的参数存放在dict中
"""
def person(name,age,**kw):
    print(f"name:{name},age:{age},kw{kw}")

# 当只传入 name 和 age的时候
person("周佳琪小宝贝!",22)  # name:周佳琪小宝贝!,age:22,kw{}
# 传入任意个数的关键字参数
person("周佳琪是高冷御姐",22,city="大西北",sexg="小屁孩")  # name:周佳琪是高冷御姐,age:22,kw{'city': '大西北', 'sexg': '小屁孩'}
extra = {'city': 'Beijing', 'job': 'Engineer'}
person("周佳琪是高冷御姐",22,city=extra["city"],color="red")  # name:周佳琪是高冷御姐,age:22,kw{'city': 'Beijing', 'color': 'red'}

# **extra表示把extra这个dict的所有key-value用关键字参数传入到函数的**kw参数，
# kw将获得一个dict，注意kw获得的dict是extra的一份拷贝，对kw的改动不会影响到函数外的extra。
# 将 extra 完整传入
print("周佳琪是高冷御姐",22,extra)

def func(*num):
    sum = 0
    for i in num:
        sum = sum + i * i
    print(sum)

"""
    命名关键字参数
"""
